/*!
 * \file WtDtPorter.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief WonderTrader数据Porter接口头文件
 * 
 * \details 该文件定义了WonderTrader数据服务系统的C语言Porter接口：
 *          - 提供C语言兼容的API接口，支持多语言调用
 *          - 支持数据服务系统的初始化和启动
 *          - 支持扩展Parser接口，用于自定义行情解析器
 *          - 支持扩展Dumper接口，用于自定义数据导出器
 *          - 支持实时行情数据推送和处理
 *          - 支持历史数据导出和管理
 *          - 支持Level2数据（订单队列、订单明细、逐笔成交）处理
 *          - 支持日志记录和版本信息查询
 *          
 *          主要功能模块：
 *          - 数据服务系统初始化和配置管理
 *          - 扩展Parser接口：自定义行情解析器
 *          - 扩展Dumper接口：自定义数据导出器
 *          - 实时行情数据推送接口
 *          - 历史数据导出接口
 *          - Level2数据处理接口
 */
#pragma once
#include "PorterDefs.h"


#ifdef __cplusplus
extern "C"
{
#endif

	/**
	 * @brief 初始化数据服务系统
	 * @details 初始化WonderTrader数据服务系统，设置配置文件和日志配置
	 * @param cfgFile 配置文件路径
	 * @param logCfg 日志配置文件路径
	 */
	EXPORT_FLAG void		initialize(WtString cfgFile, WtString logCfg);
	
	/**
	 * @brief 启动数据服务系统
	 * @details 启动WonderTrader数据服务系统，开始数据处理
	 * @param bAsync 是否异步启动（默认为false）
	 */
	EXPORT_FLAG void		start(bool bAsync = false);

	/**
	 * @brief 获取版本信息
	 * @details 获取WonderTrader数据服务系统的版本信息
	 * @return WtString 版本信息字符串
	 */
	EXPORT_FLAG	WtString	get_version();
	
	/**
	 * @brief 写入日志
	 * @details 向系统日志写入指定级别的日志信息
	 * @param level 日志级别
	 * @param message 日志消息
	 * @param catName 日志分类名称
	 */
	EXPORT_FLAG	void		write_log(unsigned int level, const char* message, const char* catName);


#pragma region "扩展Parser接口"
	/**
	 * @brief 创建扩展Parser
	 * @details 创建一个扩展的行情解析器实例
	 * @param id Parser标识符
	 * @return bool 创建是否成功
	 */
	EXPORT_FLAG	bool		create_ext_parser(const char* id);

	/**
	 * @brief 注册Parser回调函数
	 * @details 注册扩展Parser的事件回调和订阅回调函数
	 * @param cbEvt Parser事件回调函数
	 * @param cbSub Parser订阅回调函数
	 */
	EXPORT_FLAG void		register_parser_callbacks(FuncParserEvtCallback cbEvt, FuncParserSubCallback cbSub);

	/**
	 * @brief 推送行情数据
	 * @details 通过扩展Parser推送实时行情数据
	 * @param id Parser标识符
	 * @param curTick 当前tick数据
	 * @param uProcFlag 处理标志
	 */
	EXPORT_FLAG	void		parser_push_quote(const char* id, WTSTickStruct* curTick, WtUInt32 uProcFlag);
#pragma endregion "扩展Parser接口"

#pragma region "扩展Dumper接口"
	/**
	 * @brief 创建扩展Dumper
	 * @details 创建一个扩展的数据导出器实例
	 * @param id Dumper标识符
	 * @return bool 创建是否成功
	 */
	EXPORT_FLAG	bool		create_ext_dumper(const char* id);

	/**
	 * @brief 注册扩展Dumper
	 * @details 注册扩展Dumper的K线和tick数据导出回调函数
	 * @param barDumper K线数据导出回调函数
	 * @param tickDumper tick数据导出回调函数
	 */
	EXPORT_FLAG void		register_extended_dumper(FuncDumpBars barDumper, FuncDumpTicks tickDumper);

	/**
	 * @brief 注册扩展高频数据Dumper
	 * @details 注册扩展Dumper的高频数据（订单队列、订单明细、逐笔成交）导出回调函数
	 * @param ordQueDumper 订单队列导出回调函数
	 * @param ordDtlDumper 订单明细导出回调函数
	 * @param transDumper 逐笔成交导出回调函数
	 */
	EXPORT_FLAG void		register_extended_hftdata_dumper(FuncDumpOrdQue ordQueDumper, FuncDumpOrdDtl ordDtlDumper, FuncDumpTrans transDumper);
#pragma endregion "扩展Dumper接口"

#ifdef __cplusplus
}
#endif